package Metier.Objets;

public class Produit  implements Comparable {

    private int id;
    private String nom;
    private final TypeProduit type;
    private float prix;
    private Integer seuilStock;
    private Integer seuilVitrine;
    private Integer seuilVitrineHDP;
    private Integer tempsCuisson;
    private Integer dureeVie;
    
    /**
     * constructeur de la classe Produit avec tous le(s) attributs obligatoire(s)
     * @param lId
     * @param lNom
     * @param lType 
     */
    public Produit(int lId, String lNom, TypeProduit lType){
        id = lId;
        nom = lNom;
        type = lType;
        prix = 0;
        seuilStock = 0;
        seuilVitrine = 0;
        seuilVitrineHDP = 0;
        tempsCuisson = 0;
        dureeVie = 0;
    }
    
    /**
     * constructeur de la classe Lot avec tout les attributs en paramètres
     * @param lId
     * @param lNom
     * @param lType
     * @param lPrix
     * @param lSeuilStock
     * @param lSeuilVitrine
     * @param lSeuilVitrineHDP
     * @param lTempsCuisson
     * @param lDureeVie 
     */
    public Produit(int lId, String lNom, TypeProduit lType, float lPrix, 
            int lSeuilStock, int lSeuilVitrine,int lSeuilVitrineHDP, 
            int lTempsCuisson, int lDureeVie ){
        id = lId;
        nom = lNom;
        type = lType;
        prix = lPrix;
        seuilStock = lSeuilStock;
        seuilVitrine = lSeuilVitrine;
        seuilVitrineHDP = lSeuilVitrineHDP;
        tempsCuisson = lTempsCuisson;
        dureeVie = lDureeVie;
    }
    
    
    /*
        constructeur de la classe Lot avec tout les attributs en paramètres sauf l'id
    */
    public Produit(String lNom, TypeProduit lType, float lPrix, 
            int lSeuilStock, int lSeuilVitrine,int lSeuilVitrineHDP, 
            int lTempsCuisson, int lDureeVie ){
        id = 0;
        nom = lNom;
        type = lType;
        prix = lPrix;
        seuilStock = lSeuilStock;
        seuilVitrine = lSeuilVitrine;
        seuilVitrineHDP = lSeuilVitrineHDP;
        tempsCuisson = lTempsCuisson;
        dureeVie = lDureeVie;
    }
    
    public Produit(String lNom, TypeProduit lType, float lPrix, 
            int lSeuilStock, int lSeuilVitrine,int lSeuilVitrineHDP){
        id = 0;
        nom = lNom;
        type = lType;
        prix = lPrix;
        seuilStock = lSeuilStock;
        seuilVitrine = lSeuilVitrine;
        seuilVitrineHDP = lSeuilVitrineHDP;
        tempsCuisson = 0;
        dureeVie = 0;
    }
    
    public Produit(int lId, String lNom, TypeProduit lType, float lPrix, 
            int lSeuilStock, int lSeuilVitrine,int lSeuilVitrineHDP){
        id = lId;
        nom = lNom;
        type = lType;
        prix = lPrix;
        seuilStock = lSeuilStock;
        seuilVitrine = lSeuilVitrine;
        seuilVitrineHDP = lSeuilVitrineHDP;
        tempsCuisson = 0;
        dureeVie = 0;
    }
    
    /**
     * renvoie l'id du produit
     * @return 
     */
    public int getId(){
        return id;
    }
    /**
     * modifie l'id du produit
     * @param lId 
     */
    public void setId(int lId){
        id = lId;
    }
    
    /**
     * renvoie le nom du produit
     * @return 
     */
    public String getNom(){
        return nom;
    }
    
    /**
     * modifie le nom du produit
     * @param lNom 
     */
    public void setNom(String lNom){
        nom = lNom;        
    }
    
    /**
     * renvoie le type du produit
     * @return 
     */
    public TypeProduit getType(){
        return type;
    }
    
    /**
     * renvoie le prix du produit
     * @return 
     */
    public float getPrix(){
        return prix;
    }
    /**
     * modifie le prix du produit
     * @param lPrix 
     */
    public void setPrix(float lPrix){
        if (lPrix > 0){
            prix = lPrix;
        }
    }
    
    /**
     * renvoie le seuilStock du produit
     * @return 
     */
    public int getSeuilStock(){
        return seuilStock;
    }
    /**
     * modifie le seuilStock du produit
     * @param lSeuilStock 
     */
    public void setSeuilStock(int lSeuilStock){
        if (lSeuilStock > 0){
            seuilStock = lSeuilStock;
        }
    }
    
    /**
     * renvoie le seuilVitrine du produit
     * @return 
     */
    public int getSeuilVitrine(){
        return seuilVitrine;
    }
    /**
     * modifie le seuilVitrine du produit
     * @param lSeuilVitrine 
     */
    public void setSeuilVitrine(int lSeuilVitrine){
        if (lSeuilVitrine > 0){
            seuilVitrine = lSeuilVitrine;
        }
    }
    
    /**
     * renvoie le seuilVitrineHDP du produit
     * @return 
     */
    public int getSeuilVitrineHDP(){
        return seuilVitrineHDP;
    }
    
    /**
     * modifie le seuilVitrineHDP du produit
     * @param lSeuilVitrineHDP 
     */
    public void setSeuilVitrineHDP(int lSeuilVitrineHDP){
        if (lSeuilVitrineHDP > 0){
            seuilVitrineHDP = lSeuilVitrineHDP;
        }
    }
    
    /**
     * renvoie le temps de cuisson du produit
     * @return 
     */
    public int getTempsCuisson(){
        return tempsCuisson;
    }
    
    /**
     * modifie le temps de cuisson du produit
     * @param temps 
     */
    public void setTempsCuisson(int temps){
        if (temps > 0){
            tempsCuisson = temps;
        }
    }
    
    /**
     * renvoie le dureeVie du produit
     * @return 
     */
    public int getDureeVie(){
        return dureeVie;
    }
    
    /**
     * modifie la dureeVie du produit
     * @param lDureeVie 
     */
    public void setDureeVie(int lDureeVie){
        if (lDureeVie > 0){
            dureeVie = lDureeVie;
        }
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Produit produit = (Produit) o;

        return this.id == produit.getId();
    }

    @Override
    public int hashCode() {
        return id;
    }

    @Override
    public int compareTo(Object o) {
        int i = ((Produit)o).getType().toString().compareTo(this.getType().toString());
        if (i == 0) {
            i = -((Produit)o).getNom().compareTo(this.getNom());
        }
        return i;
    }

    @Override
    public String toString() {
        return this.getNom();
    }
}
